//
//  BaseViewController.swift
//  微博
//
//  Created by xm on 2018/3/17.
//  Copyright © 2018年 xm. All rights reserved.
//

import UIKit
import YYModel

class BaseViewController: UIViewController{
    
    lazy var navigationBar=UINavigationBarExt(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 64))
    lazy var navItem=UINavigationItem()//自定义导航栏条目
    
    var tableView: UITableView?//
    var refreshContol:XMRefreshControl?//下拉刷新控件
    var isPullUp=false//是否是上拉加载更多
    //访客信息
    var visitorInfo:[String:String]?
    var dataList:[AnyObject]=[]//数据源
    
    override func viewDidLoad() {
        super.viewDidLoad()
        setupNotificationObser()
        initView()//初始化视图
        if NetworkManager.shared.userLogined {
            loadData()
        }
    }
 
    
    override var title: String?{
        didSet{
            navItem.title=title
        }
    }
    /**
     *加载数据
     **/
    func loadData() {
        print("===加载数据=====")
        refreshContol?.endRefreshing()//结束刷新
        isPullUp=false 
    }
    
    deinit {
        //取消注册的通知
        removeNotificatonObserver()
    }
    
}

// MARK:-设置界面UI
extension BaseViewController{

    func initView(){
        //取消自动缩进-如果隐藏了导航栏，会缩进20个点
       automaticallyAdjustsScrollViewInsets=false
       setupNavigationBar()
        
        if NetworkManager.shared.userLogined{//用户已经登录了
          setupTableView()
        }else{
          setupVisitorView()//未登录设置访客视图
        }
       
    }
    
    //设置自定义导航栏
    func setupNavigationBar(){
        view.addSubview(navigationBar)//添加自定义导航栏到视图
        navigationBar.items=[navItem]
        //设置navBar 的渲染颜色，解决默认透明度过高导航栏相容问题
        navigationBar.barTintColor=UIColor(hex: 0xF6F6F6);
        navigationBar.titleTextAttributes=[NSForegroundColorAttributeName:UIColor.darkGray]
        navigationBar.tintColor=UIColor.orange
    }
    
    //设置表格视图
    private func setupTableView(){
        tableView=UITableView(frame: view.bounds, style: .plain)
        view.insertSubview(tableView!, belowSubview: navigationBar)
        tableView?.delegate=self;
        tableView?.dataSource=self
        //设置内容边距缩进
        tableView?.contentInset=UIEdgeInsets(top: navigationBar.bounds.height - 20,
                                             left: 0,
                                             bottom: tabBarController?.tabBar.bounds.height ?? 49,
                                             right: 0)
        //修改指示器缩进
        tableView?.scrollIndicatorInsets = tableView!.contentInset
        //设置系统自带的下拉刷新控件
        refreshContol=XMRefreshControl()
        tableView?.addSubview(refreshContol!)
        refreshContol?.addTarget(self, action:#selector(loadData), for:.valueChanged)
    }
    //设置访客视图
    private func setupVisitorView(){
        let visitorView=VisitorView(frame: view.bounds)
        view.insertSubview(visitorView, belowSubview: navigationBar)
        visitorView.setupVisitorViewInfo(dict: visitorInfo)//设置访客视图信息
        navItem.leftBarButtonItem=UIBarButtonItem(title: "注册", target: self, action: nil)
        navItem.rightBarButtonItem=UIBarButtonItem(title: "登录", target: self, action: nil)
    }
}


// MARK:-表格数据源代理方法
extension BaseViewController:UITableViewDataSource,UITableViewDelegate{
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
        return dataList.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        return UITableViewCell()
    }
    
    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        let row=indexPath.row//当前行
        
        let section=tableView.numberOfSections-1
        
        if (row<0 || section<0) {
            return
        }
        //最后一个分组的行数
        let count=tableView.numberOfRows(inSection: section)
        //最后一行
        if row==(count-1) && !isPullUp {
            //isPullUp=true;
            print("======上拉加载更多数据了=======")
        }
    }
    
    func tableView(_ tableView: UITableView, willDisplayFooterView view: UIView, forSection section: Int) {
        
        print("======上拉加载更多数据了=======")
    }
}

// MARK: - 注册通知回调方法
extension BaseViewController{
    
    func setupNotificationObser() -> () {
        NotificationCenter.default.addObserver(self, selector: #selector(onLoginSuccess),
                                               name: NSNotification.Name(WBLoginSucceNotification), object: nil)
    }
    
    func removeNotificatonObserver() {
        NotificationCenter.default.removeObserver(self)
    }
    
    func onLoginSuccess(){
        print("===登录成功===")
        navItem.leftBarButtonItem=nil
        navItem.rightBarButtonItem=nil
        view=nil//view置空 系统会自动调用viewDidLoad()重走初始化流程
        //避免再调用viewDidLoad()时，出现重复初始问题
        removeNotificatonObserver()
    }
}
